<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>类与继承</title>
<body>
    <script>
        // 创建people  name属性，吃饭方法eat
        // 创建学生 student name属性 number学号属性 sayHI方法
        // 创建老师 Teacher name属性 major 学科  teach 教学方法
        class People{
            constructor(name){this.name = name;}
            eat(){console.log(`${this.name}正在吃饭`)}
        }
        class Student extends People{
            constructor(name,number){
                super(name); // 调用父类（超类的构造函数）
                this.number = number;
            }
            sayHi(){
                console.log(`姓名:${this.name},学号:${this.number}`)
            }
        }
        // 实例化一个学生
        const xialuo = new Student("夏洛",110);
        // 查看xialuo属性
        console.log("查看xialuo属性",xialuo.name,xialuo.number);
        // 调用夏洛方法
        xialuo.sayHi();//打招呼
        xialuo.eat();//吃饭
        // 输出xialuo
        console.log(xialuo);
        // 夏洛的吃饭方法是哪儿来的？  来自于隐式原型 __proto__
        // 当一个对象的属性方法，被引用是，如果该对象没有去定义，就去他的隐式原型__proto__去查找
        //  对象的隐式原型__proto__ ===类的显示原型 Student.prototype

        // instanceof 判断对象是否为某个类的实例
        // instanceof 前面的对象顺着隐式原型__proto__向上查找  如果能找到 instaceof 后面类的显示元素prototype 则返回为true
        // xialuo.__proto__ === Student.prototype  
        // xialuo  instanceof  Student ===true
        // xailuo.__proto__.__proto__== People.prototype 
        // xialuo  instanceof  People ===true
        // xailuo.__proto__.__proto__.__proto__== Obejct.prototype 
        // xialuo  instanceof  Object ===true
    </script>

</body>
</html>